/* 
 * Usuario.java
 * 
 * Data de criação: 19/09/2010
 * 
 * CORPORATIVO - MTE. 
 *
 */
package br.com.o2solutions.siso.integration.entidade;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.com.o2solutions.core.integration.repository.entity.BaseEntity;
import br.com.o2solutions.util.security.CryptoUtil;

/**
 * Classe responsável por representar a credencial de acesso ao sistema tornando a pessoa um usuário do sistema.
 * 
 * @author Osvaldeir
 * @since 19/09/2010
 * 
 */
@Entity
@Table(name = "TBCREDENCIAL")
public class Credencial extends BaseEntity<Integer> {

	private static final long serialVersionUID = 1L;

	private Date dataPrimeiroAcesso;

	private Date dataRevogacaoAcesso;
	
	private Date dataUltimoAcesso;
	
	private String login;

	private String senha;
	
	private Pessoa pessoa;

	/**
	 * Retorna o(a) dataUltimoAcesso.
	 * 
	 * @return Date
	 */
	@Temporal(TemporalType.DATE)
	@Column(name="DATAULTIMOACESSO")
	public Date getDataUltimoAcesso() {
		return dataUltimoAcesso;
	}

	/**
	 * Atribui o(a) dataUltimoAcesso.
	 *
	 * @param dataUltimoAcesso Date
	 */
	public void setDataUltimoAcesso(Date dataUltimoAcesso) {
		this.dataUltimoAcesso = dataUltimoAcesso;
	}

	@Id
	@Column(name="CREDENCIALID")
	@Override
	public Integer getId() {
		if (getPessoa()!=null){
			id =  getPessoa().getId();
		}
		return id;
	}
	
	@Override
	public void setId(Integer id) {
		if (getPessoa()==null){
			pessoa = new Pessoa();
		}
		getPessoa().setId(id);
	}
	
	/**
	 * Retorna o(a) pessoa.
	 * 
	 * @return Pessoa
	 */
	@OneToOne
	@PrimaryKeyJoinColumn
	public Pessoa getPessoa() {
		return pessoa;
	}

	/**
	 * Atribui o(a) pessoa.
	 *
	 * @param pessoa Pessoa
	 */
	public void setPessoa(Pessoa pessoa) {
		if (pessoa!=null){
			setId(pessoa.getId());
		}
		this.pessoa = pessoa;
	}

	/**
	 * Retorna o(a) login.
	 * 
	 * @return String
	 */
	@Column(name = "LOGIN", nullable = false, length = 50)
	public String getLogin() {
		return login;
	}

	/**
	 * Atribui o(a) login.
	 * 
	 * @param login
	 *            String
	 */
	public void setLogin(String login) {
		this.login = login;
	}

	/**
	 * Retorna o(a) senha.
	 * 
	 * @return String
	 */
	@Column(name = "SENHA", nullable = false, length = 255)
	public String getSenha() {
		if (senha != null) {
			senha = CryptoUtil.createSHA256Hash(senha);
		}
		return senha;
	}

	/**
	 * Atribui o(a) senha.
	 * 
	 * @param senha
	 *            String
	 */
	public void setSenha(String senha) {
		this.senha = senha;
	}

	/**
	 * Retorna o(a) dataPrimeiroAcesso.
	 * 
	 * @return Date
	 */
	@Temporal(TemporalType.DATE)
	@Column(name = "DATAPRIMEIROACESSO", nullable = true)
	public Date getDataPrimeiroAcesso() {
		return dataPrimeiroAcesso;
	}

	/**
	 * Atribui o(a) dataPrimeiroAcesso.
	 * 
	 * @param dataPrimeiroAcesso
	 *            Date
	 */
	public void setDataPrimeiroAcesso(Date dataPrimeiroAcesso) {
		this.dataPrimeiroAcesso = dataPrimeiroAcesso;
	}

	/**
	 * Retorna o(a) dataRevogacaoAcesso.
	 * 
	 * @return Date
	 */
	@Temporal(TemporalType.DATE)
	@Column(name = "DATAREVOGACAOACESSO", nullable = true)
	public Date getDataRevogacaoAcesso() {
		return dataRevogacaoAcesso;
	}

	/**
	 * Atribui o(a) dataRevogacaoAcesso.
	 * 
	 * @param dataRevogacaoAcesso
	 *            Date
	 */
	public void setDataRevogacaoAcesso(Date dataRevogacaoAcesso) {
		this.dataRevogacaoAcesso = dataRevogacaoAcesso;
	}

}
